﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace AudiPyme.DAL
{
    public class PlanMejoraFactory
    {
        //Devuelve los elementos de plan de mejora asociados a un informe
        public static List<PlanMejora> RecogePlanMejoraInforme(int IdInforme)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            List<PlanMejora> ElementosPlanMejora = (from Plan in agenteBD.PlanMejoraEstablecer
                                                    where Plan.IdInforme == IdInforme
                                                    orderby Plan.Orden
                                                    select Plan).ToList();
            return ElementosPlanMejora;
        }

        //Método que elimina de forma física todos los planes de mejora asociados a una empresa
        internal static void EliminaTotalPlanMejora(int IdEmpresa)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            IQueryable<PlanMejora> PlanesEliminarQuery = from PlanM in agenteBD.PlanMejoraEstablecer
                                                         join EmpInf in agenteBD.EmpresaInformeEstablecer on PlanM.IdInforme equals EmpInf.IdInforme
                                                         where EmpInf.IdEmpresa == IdEmpresa
                                                         select PlanM;
            if (PlanesEliminarQuery.Count() != 0)
            {
                foreach (PlanMejora Plan in PlanesEliminarQuery)
                {
                    agenteBD.PlanMejoraEstablecer.DeleteObject(Plan);
                }
                agenteBD.SaveChanges();
            }
        }

        //Elimina el plan de mejora asociado a un informe
        internal static void EliminaPlanMejoraInforme(int IdInforme)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            IQueryable<PlanMejora> PlanesEliminarQuery = from PlanM in agenteBD.PlanMejoraEstablecer
                                                         where PlanM.IdInforme == IdInforme
                                                         select PlanM;
            if (PlanesEliminarQuery.Count() != 0)
            {
                foreach (PlanMejora Plan in PlanesEliminarQuery)
                {
                    agenteBD.PlanMejoraEstablecer.DeleteObject(Plan);
                }
                agenteBD.SaveChanges();
            }
        }

        //Elimina los planes de mejora asociados a una lista de informes
        internal static void EliminaPlanMejoraInformes(List<int> LInformes)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            IQueryable<PlanMejora> PlanesEliminarQuery = from PlanM in agenteBD.PlanMejoraEstablecer
                                                         where LInformes.Contains(PlanM.IdInforme)
                                                         select PlanM;
            if (PlanesEliminarQuery.Count() != 0)
            {
                foreach (PlanMejora Plan in PlanesEliminarQuery)
                {
                    agenteBD.PlanMejoraEstablecer.DeleteObject(Plan);
                }
                agenteBD.SaveChanges();
            }
        }



        //Método que sirve para insertar cada elemento de plan de mejora en la BD y devuelve el IdControl que
        //se cumple
        public static int InsertaElementoPlanMejora(int IdActivo, int IdAmenaza, int IdControl, int IdInforme, int iteracion)
        {
            ModeloContainer agenteBD = new ModeloContainer();
            PlanMejora NuevoElemento = new PlanMejora();
            NuevoElemento.IdInforme = IdInforme;
            NuevoElemento.IdActivo = IdActivo;
            NuevoElemento.IdAmenaza = IdAmenaza;
            NuevoElemento.IdControl = IdControl;
            NuevoElemento.Orden = iteracion;
            if (NuevoElemento.IdControl != 0)
            {
                agenteBD.AddToPlanMejoraEstablecer(NuevoElemento);
                agenteBD.SaveChanges();
                return NuevoElemento.IdControl;
            }
            else
            {
                return 0;
            }
        }
    }
}
